home *** CD-ROM | disk | FTP | other *** search
/ Spanish Scene 1 / SpanishScene1.iso / spanish pack n°1 by llfb / --llfb-- / programas / sources1.dms / sources1.adf / SOURCES / Vectores / DotVector.ASM < prev    next >
Assembly Source File  |  1996-06-04  |  7KB  |  266 lines

  1. ;DOTVECTOR BY LADO OF FI-RE CREW IN 1992 !
  2.     
  3.     
  4. ;    org $25000
  5. ;    load $25000
  6.     
  7.  
  8.     Section    Roman,code_c
  9.  
  10.  
  11. ;    >extern 'DF0:raytr.dat',sinus
  12.     
  13.  
  14. j    lea $30000,a0             ;memoria torlese
  15. lo    clr.l (a0)+
  16.     cmp.l #$60000,a0
  17.     bcs lo
  18.     move.w #400,d7           ;make screen clear rutin
  19.     lea cleen(pc),a0
  20. db    move.l code(pc),(a0)+
  21.     dbf d7,db
  22.     move.w #$4e75,(a0)       ;RTS a vegere
  23.  
  24.     lea row(pc),a0
  25.     moveq #0,d0
  26.     move.w #$d1,d7
  27. nmi    move.w d0,(a0)+
  28.     add.w #$50,d0
  29.     dbf d7,nmi
  30.     
  31.     lea $dff000,a6           ;custom
  32. wr    move.l 4(a6),d0
  33.     lsr.l #8,d0
  34.     cmp.w #$138,d0
  35.     bne wr
  36.     move.w #$7fff,$96(a6)    ;clear  DMACON
  37.     move.w #$7fff,$9a(a6)    ;clear  INTENA
  38.     move.l #copper,$84(a6)   
  39.     clr.w $8a(a6)            ;start copper
  40.     move.w #$87d0,$96(a6)    ;DMACON
  41.     move.w #$c010,$9a(a6)
  42.  
  43. h1    bsr wait                 ;waitblitter
  44. h2    move.l 4(a6),d0          ;waitraster
  45.     lsr.l #8,d0
  46.     cmp.w #$d0,d0
  47.     bne h2
  48.     bsr filler               
  49.     btst #6,$bfe001
  50.     bne h1
  51.     bsr wait
  52.     
  53.     move.w #$7fff,$96(a6)
  54.     move.w #$7fff,$9a(a6)
  55.     clr.w $88(a6)            ;start original copper
  56.     move.w #$87f0,$96(a6)
  57.     move.w #$e02c,$9a(a6)
  58.     clr.l d0
  59.     rts                      ;END
  60.     
  61.  
  62. filler    add.w #2,addx           ;xszog novelese
  63.     and.w #$1ff,addx   
  64.     add.w #2,addy           ;yszog novelese    
  65.     and.w #$1ff,addy
  66.     add.w #2,addz           ;zszog novelese        
  67.     and.w #$1ff,addz
  68.     lea coords(pc),a0        ;pontok x,y,z koordinatai
  69.     lea sinus(pc),a1         ;sinus ertekek
  70.     lea $80(a1),a3           ;cosinus ertekek
  71.     lea tarolo(pc),a2        ;2D x,y letarolasa
  72.     lea addx(pc),a4          ;szogek
  73.     move.l #7,d7            ;pontok szama
  74. h3    movem.w (a0)+,d0/d1/d6   ;x,y,z
  75.     move.w 4(a4),d5          ;Zszog
  76.     bsr calcul               ;Z-rotation
  77.     move.w d0,d6             ;X tarolasa
  78.     move.w d3,d0             ;Y
  79.     move.w (a4),d5           ;Xszog
  80.     bsr calcul               ;X-rotation
  81.     move.w d0,d6             ;uj Y tarolasa
  82.     move.w d3,d0             ;Z
  83.     move.w 2(a4),d5          ;Yszog
  84.     bsr calcul               ;Y-rotation
  85.     exg d0,d3                ;X csere Z-vel    Z=d3
  86.     moveq #12,d6             ;lekepezes 2D-re
  87.     move.w #$550,d2
  88.     sub.w d3,d2              ;$444-Z
  89.     muls d2,d0               ;z'*x
  90.     asr.l d6,d0              ;z'*x/2048=2D X
  91.     muls d2,d1               ;z'*y
  92.     asr.l d6,d1              ;z'*y/2048=2D Y
  93.     add.w #150,d0         ;X=X+150     kozepre a kepernyon           
  94.     add.w #95,d1            ;Y=Y+100
  95.     move.w d0,(a2)+         ;2D X tarolasa
  96.     move.w d1,(a2)+          ;2D Y tarolasa
  97.     dbf d7,h3                ;14-szer               
  98.  
  99.     eor.w #$8000,erno+2        ;kepernyo csere
  100.     eor.w #$8000,copscr       ;csere a copperben is
  101.     eor.w #$8000,copscr+4
  102.  
  103.     movem.l null(pc),d0-d7/a1-a6   ;regiszterek nullazasa
  104.     move.l erno(pc),a0
  105.     lea $3e00(a0),a0
  106.     bsr cleen
  107.     lea $dff000,a6    
  108.     
  109.     move.w #6,wor              ;6 lap van
  110.     lea tarolo(pc),a1          ;2D x,y coords
  111.     lea meghat(pc),a4          ;pontok structuraja
  112. l7    lea tarol2(pc),a5          ;tarolo
  113.     move.l erno(pc),a2         ;aktualis kepernyo
  114.     movem.w (a4),d0/d1/d2      ;lathatosag eldontese
  115.     move.w (a1,d1.w),d3        ;x1
  116.     sub.w (a1,d0.w),d3         ;X1-X0
  117.     move.w 2(a1,d2.w),d4       ;y2
  118.     sub.w 2(a1,d1.w),d4        ;Y2-Y1
  119.     move.w 2(a1,d1.w),d5       ;y1
  120.     sub.w 2(a1,d0.w),d5        ;Y1-Y0
  121.     move.w (a1,d2.w),d6        ;x2
  122.     sub.w (a1,d1.w),d6         ;X2-X1
  123.     mulu d4,d3                 ;(y2-y1)(x1-x0)=d3
  124.     mulu d6,d5                 ;(y1-y0)(x2-x1)=d5
  125.     sub.w d5,d3                
  126.     bmi vakon                  ;nem latszik a lap
  127.     add.l #$28,a2              ;akkor masik kepernyo
  128. vakon    moveq #3,d7                ;4-szer
  129. allit    move.w (a4)+,d0            ;pont
  130.     move.l (a1,d0.w),(a5)+     ;4 pont masolasa
  131.     dbf d7,allit
  132.     lea tarol2(pc),a0          
  133.     lea row(pc),a3             
  134.     moveq #3,d7                ;/8
  135.     move.w (a0),d0             ;x1
  136.     sub.w 4(a0),d0             ;x1-x2
  137.     swap d0
  138.     clr.w d0
  139.     asr.l d7,d0
  140.     move.w 2(a0),d1            ;y1
  141.     sub.w 6(a0),d1             ;y1-y2
  142.     swap d1
  143.     clr.w d1
  144.     asr.l d7,d1
  145.     move.w 8(a0),d2            ;x3
  146.     sub.w 4(a0),d2             ;x3-x2
  147.     swap d2
  148.     clr.w d2
  149.     asr.l d7,d2
  150.     move.w 10(a0),d3           ;y3
  151.     sub.w 6(a0),d3             ;y3-y2
  152.     swap d3
  153.     clr.w d3
  154.     asr.l d7,d3
  155.     move.w 12(a0),d4           ;x4
  156.     sub.w 8(a0),d4             ;x4-x3
  157.     swap d4
  158.     clr.w d4
  159.     asr.l d7,d4
  160.     move.w 14(a0),d5           ;y4
  161.     sub.w 10(a0),d5            ;y4-y3
  162.     swap d5
  163.     clr.w d5
  164.     asr.l d7,d5
  165.     sub.l d0,d4                ;(x4-x3)-(x1-x2)
  166.     asr.l d7,d4
  167.     move.l d4,plc
  168.     sub.l d1,d5                ;(y4-y3)-(y1-y2)
  169.     asr.l d7,d5
  170.     move.l d5,plc+4
  171.     move.w 4(a0),d6            ;x2
  172.     swap d6
  173.     clr.w d6
  174.     move.l d6,plc+8
  175.     move.w 6(a0),d6            ;y2
  176.     swap d6
  177.     clr.w d6
  178.     move.l d6,plc+12
  179.     move.l d2,plc+16
  180.     move.l d3,plc+20
  181.     bsr wait    
  182.     move.w #8,wor+2
  183. l1    moveq #8,d7
  184.     move.l plc+8(pc),d2        ;kezdo x
  185.     move.l plc+12(pc),d3       ;kezdo y
  186. l2    move.l d2,d4               
  187.     swap d4
  188.     move.l d3,d5
  189.     swap d5
  190.     move.w d4,d6               ;x2
  191.     lsr.w #3,d4                ;x2/8=oszlop
  192.     not.b d6                   ;a byteon belul hanyadik bitet kell setbe
  193.     add.w d5,d5                ;word
  194.     add.w (a3,d5.w),d4         ;sor
  195.     bset d6,(a2,d4.w)          ;bit beallitasa 1-be
  196.     add.l d0,d2                ;x=x+x1-x2
  197.     add.l d1,d3                ;y=y+y1-y2
  198.     dbf d7,l2
  199.     add.l plc(pc),d0
  200.     add.l plc+4(pc),d1
  201.     move.l plc+16(pc),d6
  202.     add.l d6,plc+8
  203.     move.l plc+20(pc),d6
  204.     add.l d6,plc+12
  205.     subq.w #1,wor+2
  206.     bpl l1
  207.     subq.w #1,wor
  208.     bne l7
  209.     rts
  210.         
  211.     
  212. calcul    move.w (a3,d5.w),d4     ;cos ertek
  213.     move.w (a1,d5.w),d5     ;sin ertek
  214.     move.w d0,d2            ;c1
  215.     move.w d1,d3        ;c2
  216.     muls d4,d0        ;c1*cos(c0angle)
  217.     muls d5,d1        ;c2*sin(c0angle)
  218.     muls d4,d3        ;c2*cos(c0angle)
  219.     muls d5,d2        ;c1*sin(c0angle)
  220.     sub.l d1,d0        ;c1*cos(c0angle)-c2*sin(c0angle)
  221.     add.l d2,d3        ;c2*cos(c0angle)+c1*sin(c0angle)
  222.     add.l d0,d0        
  223.     add.l d3,d3
  224.     swap d0                 ;uj c1
  225.     swap d3                 ;uj c2
  226.     move.w d6,d1        
  227.     rts
  228.  
  229. wait    btst #$e,2(a6)          ;waitblitter
  230.     bne wait
  231.     rts
  232.  
  233. code    movem.l d0-d7/a1-a6,-(a0)
  234.  
  235.  
  236. copper    dc.w $100,$200,$8e,$2c81,$90,$2cc1,$92,$38,$94,$d0
  237.     dc.w $120,0,$122,0,$124,0,$126,0,$128,0,$12a,0,$12c,0,$12e,0
  238.     dc.w $130,0,$132,0,$134,0,$136,0,$138,0,$13a,0,$13c,0,$13e,0
  239.     dc.w $180,0,$108,$28,$10a,$28,$182
  240. copcol    dc.w $f0,$184,$ff0,$186,$ff0
  241.     dc.w $e0,3,$e4,3,$e2
  242. copscr    dc.w 0,$e6,$28
  243.     dc.w $3001,$fffe,$100,$2200,$180,$ff0,$3101,$fffe,$180,0
  244.     dc.w $f001,$fffe,$100,$200,$180,$ff0,$f101,$fffe,$180,0
  245.     dc.w $ffff,$fffe
  246.  
  247. coords    dc.w -150,150,150,150,150,150,150,-150,150,-150,-150,150,-150,150,-150
  248.     dc.w 150,150,-150,150,-150,-150,-150,-150,-150
  249.  
  250. meghat    dc.w 0,4,8,12,16,28,24,20,4,0,16,20,12,8,24,28,8,4,20,24,0,12,28,16
  251.  
  252.  
  253. addx    dc.w 0
  254. addy    dc.w 0            ;yangle
  255. addz    dc.w 0             ;zangle
  256. wor    dc.w 0,0
  257. erno    dc.l $38000        ;kepernyo
  258. plc    blk.l 6,0
  259. null    blk.l 16,0
  260. row    blk.w $d2,0
  261. cleen    blk.l 500,0
  262. sinus    incbin "Coleccion_Sources1:Sources/Vectores/raytr.dat"
  263. tarol2    blk.b 40,0
  264. tarolo    blk.b 100,0
  265.  
  266.